<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Title</title>
</head>
<body>

</body>
<script>
	
	// * 必须用 var 声明变量，不允许使用未声明的变量
	// "use strict";
	// var a = 1;
	// b = 2;// Uncaught ReferenceError: b is not defined
	// console.log(a,b);
	//
	// function fn(){
	// 	"use strict";
	// 	var a = 1;
	// 	b = 2;// Uncaught ReferenceError: b is not defined
	// 	console.log(a,b);
	// }
	// fn();
	
	
	// * 禁止自定义的函数中的 this 指向 window
	// function fn(){
	// 	"use strict";
	// 	console.log("fn",this);// undefined
	// }
	// fn();
	
	
	// * 创建 eval 作用域
	// eval:是一个内置函数，将字符串作为JS代码执行。
	// "use strict";
	// eval("var a = 1;var b = 2;console.log(a,b);");
	// console.log(a,b);// ReferenceError: a is not defined
	
	
	
	
	// * 对象不能有重名的属性（Chrome 已经修复了这个 Bug，IE 还会出现）
	// "use strict";
	// var obj = {
	// 	a:1,
	// 	b:2,
	// 	b:3
	// }
	// console.log(obj);
	
	
	// * 函数不能有重复的形参
	// "use strict";
	// // SyntaxError: Duplicate parameter name not allowed in this context
	// function fn(a,b,c,b){
	// }
	// fn();
	
	// * 新增一些保留字, 如:interface  public
	// "use strict";
	// var public  = 100;
	// console.log(public);
	
	// * 使用call,apply 传递的第一个参数为null 或 undefined 时，this值不会转换为全局对象
	function fn(){
		"use strict";
		console.log(this);
	}
	fn();
	fn.call(1);
	fn.apply();
	fn.bind()();
</script>
</html>